Skip to content

Correctly share current_thread with new_thread #542

Merged
AlexInLog merged 3 commits into
v2from
current_thread_inside_new_thread
Mar 12, 2024
Merged

Correctly share current_thread with new_thread #542
AlexInLog merged 3 commits into
v2from
current_thread_inside_new_thread

Conversation

@AlexInLog

Copy link
Copy Markdown
Owner

@github-actions

Copy link
Copy Markdown
Contributor

BENCHMARK RESULTS (AUTOGENERATED)

ci-ubuntu-gcc

General

name rxcpp rpp prev rpp ratio
Subscribe empty callbacks to empty observable 306.82 ns 2.16 ns 2.16 ns 1.00
Subscribe empty callbacks to empty observable via pipe operator 302.46 ns 2.16 ns 2.16 ns 1.00

Sources

name rxcpp rpp prev rpp ratio
from array of 1 - create + subscribe + immediate 704.25 ns 0.31 ns 0.62 ns 0.50
from array of 1 - create + subscribe + current_thread 1044.91 ns 5.25 ns 4.64 ns 1.13
concat_as_source of just(1 immediate) create + subscribe 2247.51 ns 121.34 ns 112.55 ns 1.08
defer from array of 1 - defer + create + subscribe + immediate 759.61 ns 0.31 ns 0.31 ns 1.00
interval - interval + take(3) + subscribe + immediate 2160.63 ns 59.23 ns 59.19 ns 1.00
interval - interval + take(3) + subscribe + current_thread 3102.25 ns 32.73 ns 32.74 ns 1.00

Filtering Operators

name rxcpp rpp prev rpp ratio
immediate_just+take(1)+subscribe 1084.35 ns 0.31 ns 0.31 ns 1.00
immediate_just+filter(true)+subscribe 838.81 ns 0.31 ns 0.31 ns 1.00
immediate_just(1,2)+skip(1)+subscribe 1003.53 ns 0.31 ns 0.31 ns 1.00
immediate_just(1,1,2)+distinct_until_changed()+subscribe 869.04 ns 0.31 ns 0.31 ns 1.00
immediate_just(1,2)+first()+subscribe 1229.28 ns 0.31 ns 0.31 ns 1.00
immediate_just(1,2)+last()+subscribe 933.11 ns 0.31 ns 0.31 ns 1.00
immediate_just+take_last(1)+subscribe 1104.12 ns 18.53 ns 17.40 ns 1.07

Schedulers

name rxcpp rpp prev rpp ratio
immediate scheduler create worker + schedule 266.31 ns 2.16 ns 2.16 ns 1.00
current_thread scheduler create worker + schedule 380.99 ns 7.10 ns 6.49 ns 1.10
current_thread scheduler create worker + schedule + recursive schedule 862.96 ns 64.17 ns 65.18 ns 0.98

Transforming Operators

name rxcpp rpp prev rpp ratio
immediate_just+map(v*2)+subscribe 840.49 ns 0.31 ns 0.31 ns 1.00
immediate_just+scan(10, std::plus)+subscribe 886.89 ns 0.31 ns 0.31 ns 1.00
immediate_just+flat_map(immediate_just(v*2))+subscribe 2306.25 ns 160.04 ns 173.31 ns 0.92
immediate_just+buffer(2)+subscribe 1587.50 ns 14.21 ns 13.60 ns 1.04
immediate_just+window(2)+subscribe + subscsribe inner 2409.92 ns 1086.29 ns 1121.12 ns 0.97

Conditional Operators

name rxcpp rpp prev rpp ratio
immediate_just+take_while(false)+subscribe 828.74 ns - - 0.00
immediate_just+take_while(true)+subscribe 842.72 ns 0.31 ns 0.31 ns 1.00

Utility Operators

name rxcpp rpp prev rpp ratio
immediate_just(1)+subscribe_on(immediate)+subscribe 2018.30 ns 0.31 ns 0.31 ns 1.00

Combining Operators

name rxcpp rpp prev rpp ratio
immediate_just(immediate_just(1), immediate_just(1)) + merge() + subscribe 3538.14 ns 176.04 ns 180.56 ns 0.97
immediate_just(1) + merge_with(immediate_just(2)) + subscribe 3608.46 ns 183.80 ns 172.20 ns 1.07
immediate_just(1) + with_latest_from(immediate_just(2)) + subscribe - 143.13 ns 136.52 ns 1.05
immediate_just(immediate_just(1),immediate_just(1)) + switch_on_next() + subscribe 3530.97 ns 1155.96 ns 1103.02 ns 1.05
immediate_just(1) + zip(immediate_just(2)) + subscribe 2112.99 ns 210.48 ns 224.79 ns 0.94

Subjects

name rxcpp rpp prev rpp ratio
publish_subject with 1 observer - on_next 34.46 ns 12.03 ns 11.71 ns 1.03

Scenarios

name rxcpp rpp prev rpp ratio
basic sample 1434.70 ns 14.60 ns 13.59 ns 1.07
basic sample with immediate scheduler 1428.62 ns 5.56 ns 5.55 ns 1.00

Aggregating Operators

name rxcpp rpp prev rpp ratio
immediate_just+reduce(10, std::plus)+subscribe 927.58 ns 0.31 ns 0.31 ns 1.00

Error Handling Operators

name rxcpp rpp prev rpp ratio
create(on_next(1), on_error())+on_error_resume_next(immediate_just(2)))+subscribe 1035.99 ns 125.65 ns 126.31 ns 0.99

ci-macos

General

name rxcpp rpp prev rpp ratio
Subscribe empty callbacks to empty observable 982.55 ns 3.85 ns 3.85 ns 1.00
Subscribe empty callbacks to empty observable via pipe operator 972.47 ns 3.86 ns 3.87 ns 1.00

Sources

name rxcpp rpp prev rpp ratio
from array of 1 - create + subscribe + immediate 1924.37 ns 0.23 ns 0.23 ns 1.00
from array of 1 - create + subscribe + current_thread 2452.37 ns 25.39 ns 25.35 ns 1.00
concat_as_source of just(1 immediate) create + subscribe 6088.02 ns 327.95 ns 327.75 ns 1.00
defer from array of 1 - defer + create + subscribe + immediate 2119.86 ns 0.26 ns 0.23 ns 1.13
interval - interval + take(3) + subscribe + immediate 5294.44 ns 122.18 ns 114.03 ns 1.07
interval - interval + take(3) + subscribe + current_thread 7082.36 ns 121.52 ns 105.26 ns 1.15

Filtering Operators

name rxcpp rpp prev rpp ratio
immediate_just+take(1)+subscribe 3589.19 ns 0.29 ns 0.23 ns 1.26
immediate_just+filter(true)+subscribe 2120.55 ns 0.29 ns 0.23 ns 1.23
immediate_just(1,2)+skip(1)+subscribe 3112.79 ns 0.26 ns 0.23 ns 1.13
immediate_just(1,1,2)+distinct_until_changed()+subscribe 2368.21 ns 0.53 ns 0.48 ns 1.10
immediate_just(1,2)+first()+subscribe 3420.56 ns 0.24 ns 0.23 ns 1.04
immediate_just(1,2)+last()+subscribe 2700.69 ns 0.26 ns 0.24 ns 1.09
immediate_just+take_last(1)+subscribe 3676.93 ns 88.22 ns 68.56 ns 1.29

Schedulers

name rxcpp rpp prev rpp ratio
immediate scheduler create worker + schedule 1011.28 ns 5.13 ns 3.84 ns 1.33
current_thread scheduler create worker + schedule 1377.60 ns 45.56 ns 36.79 ns 1.24
current_thread scheduler create worker + schedule + recursive schedule 2334.95 ns 257.32 ns 210.36 ns 1.22

Transforming Operators

name rxcpp rpp prev rpp ratio
immediate_just+map(v*2)+subscribe 2379.22 ns 0.27 ns 0.23 ns 1.16
immediate_just+scan(10, std::plus)+subscribe 2738.37 ns 0.53 ns 0.47 ns 1.13
immediate_just+flat_map(immediate_just(v*2))+subscribe 6310.39 ns 486.02 ns 416.38 ns 1.17
immediate_just+buffer(2)+subscribe 3057.65 ns 83.93 ns 67.71 ns 1.24
immediate_just+window(2)+subscribe + subscsribe inner 6695.06 ns 2897.96 ns 2303.10 ns 1.26

Conditional Operators

name rxcpp rpp prev rpp ratio
immediate_just+take_while(false)+subscribe 2433.82 ns - - 0.00
immediate_just+take_while(true)+subscribe 2334.25 ns 0.26 ns 0.23 ns 1.13

Utility Operators

name rxcpp rpp prev rpp ratio
immediate_just(1)+subscribe_on(immediate)+subscribe 5589.93 ns 0.26 ns 0.23 ns 1.13

Combining Operators

name rxcpp rpp prev rpp ratio
immediate_just(immediate_just(1), immediate_just(1)) + merge() + subscribe 8804.46 ns 526.80 ns 450.84 ns 1.17
immediate_just(1) + merge_with(immediate_just(2)) + subscribe 9777.50 ns 521.71 ns 447.37 ns 1.17
immediate_just(1) + with_latest_from(immediate_just(2)) + subscribe - 553.39 ns 474.04 ns 1.17
immediate_just(immediate_just(1),immediate_just(1)) + switch_on_next() + subscribe 9288.67 ns 2209.16 ns 1895.16 ns 1.17
immediate_just(1) + zip(immediate_just(2)) + subscribe 5979.35 ns 991.62 ns 860.67 ns 1.15

Subjects

name rxcpp rpp prev rpp ratio
publish_subject with 1 observer - on_next 85.02 ns 57.42 ns 49.55 ns 1.16

Scenarios

name rxcpp rpp prev rpp ratio
basic sample 3140.78 ns 126.20 ns 109.76 ns 1.15
basic sample with immediate scheduler 3220.76 ns 16.97 ns 15.21 ns 1.12

Aggregating Operators

name rxcpp rpp prev rpp ratio
immediate_just+reduce(10, std::plus)+subscribe 2709.20 ns 0.26 ns 0.23 ns 1.13

Error Handling Operators

name rxcpp rpp prev rpp ratio
create(on_next(1), on_error())+on_error_resume_next(immediate_just(2)))+subscribe 7300.03 ns 4714.12 ns 4108.04 ns 1.15

ci-ubuntu-clang

General

name rxcpp rpp prev rpp ratio
Subscribe empty callbacks to empty observable 277.98 ns 0.88 ns 1.56 ns 0.56
Subscribe empty callbacks to empty observable via pipe operator 285.02 ns 0.88 ns 1.56 ns 0.56

Sources

name rxcpp rpp prev rpp ratio
from array of 1 - create + subscribe + immediate 571.87 ns 0.31 ns 0.31 ns 1.00
from array of 1 - create + subscribe + current_thread 790.92 ns 5.55 ns 5.55 ns 1.00
concat_as_source of just(1 immediate) create + subscribe 1887.18 ns 114.04 ns 113.06 ns 1.01
defer from array of 1 - defer + create + subscribe + immediate 592.81 ns 0.31 ns 0.31 ns 1.00
interval - interval + take(3) + subscribe + immediate 1527.07 ns 58.26 ns 58.39 ns 1.00
interval - interval + take(3) + subscribe + current_thread 2080.36 ns 31.47 ns 31.48 ns 1.00

Filtering Operators

name rxcpp rpp prev rpp ratio
immediate_just+take(1)+subscribe 917.56 ns 0.31 ns 0.31 ns 1.00
immediate_just+filter(true)+subscribe 659.98 ns 0.31 ns 0.31 ns 1.00
immediate_just(1,2)+skip(1)+subscribe 861.00 ns 0.31 ns 0.31 ns 1.00
immediate_just(1,1,2)+distinct_until_changed()+subscribe 711.80 ns 0.31 ns 0.31 ns 1.00
immediate_just(1,2)+first()+subscribe 1137.93 ns 0.31 ns 0.31 ns 1.00
immediate_just(1,2)+last()+subscribe 743.42 ns 0.31 ns 0.31 ns 1.00
immediate_just+take_last(1)+subscribe 986.58 ns 0.31 ns 0.31 ns 1.00

Schedulers

name rxcpp rpp prev rpp ratio
immediate scheduler create worker + schedule 210.99 ns 0.88 ns 1.56 ns 0.56
current_thread scheduler create worker + schedule 321.70 ns 5.89 ns 5.57 ns 1.06
current_thread scheduler create worker + schedule + recursive schedule 625.87 ns 59.44 ns 58.83 ns 1.01

Transforming Operators

name rxcpp rpp prev rpp ratio
immediate_just+map(v*2)+subscribe 657.70 ns 0.31 ns 0.31 ns 1.00
immediate_just+scan(10, std::plus)+subscribe 715.75 ns 0.31 ns 0.31 ns 1.00
immediate_just+flat_map(immediate_just(v*2))+subscribe 1846.58 ns 119.00 ns 120.26 ns 0.99
immediate_just+buffer(2)+subscribe 1345.32 ns 14.51 ns 13.89 ns 1.05
immediate_just+window(2)+subscribe + subscsribe inner 2172.93 ns 812.46 ns 827.37 ns 0.98

Conditional Operators

name rxcpp rpp prev rpp ratio
immediate_just+take_while(false)+subscribe 662.95 ns - - 0.00
immediate_just+take_while(true)+subscribe 667.71 ns 0.31 ns 0.31 ns 1.00

Utility Operators

name rxcpp rpp prev rpp ratio
immediate_just(1)+subscribe_on(immediate)+subscribe 1627.48 ns 0.31 ns 0.31 ns 1.00

Combining Operators

name rxcpp rpp prev rpp ratio
immediate_just(immediate_just(1), immediate_just(1)) + merge() + subscribe 2664.77 ns 125.87 ns 125.81 ns 1.00
immediate_just(1) + merge_with(immediate_just(2)) + subscribe 3061.02 ns 121.25 ns 122.10 ns 0.99
immediate_just(1) + with_latest_from(immediate_just(2)) + subscribe - 110.40 ns 110.23 ns 1.00
immediate_just(immediate_just(1),immediate_just(1)) + switch_on_next() + subscribe 2633.89 ns 725.21 ns 732.25 ns 0.99
immediate_just(1) + zip(immediate_just(2)) + subscribe 1770.86 ns 171.23 ns 162.99 ns 1.05

Subjects

name rxcpp rpp prev rpp ratio
publish_subject with 1 observer - on_next 26.29 ns 14.18 ns 13.88 ns 1.02

Scenarios

name rxcpp rpp prev rpp ratio
basic sample 1056.99 ns 13.27 ns 13.27 ns 1.00
basic sample with immediate scheduler 1022.69 ns 6.17 ns 6.17 ns 1.00

Aggregating Operators

name rxcpp rpp prev rpp ratio
immediate_just+reduce(10, std::plus)+subscribe 741.35 ns 0.31 ns 0.31 ns 1.00

Error Handling Operators

name rxcpp rpp prev rpp ratio
create(on_next(1), on_error())+on_error_resume_next(immediate_just(2)))+subscribe 880.65 ns 126.00 ns 124.08 ns 1.02

ci-windows

General

name rxcpp rpp prev rpp ratio
Subscribe empty callbacks to empty observable 1009.86 ns 4.93 ns 4.93 ns 1.00
Subscribe empty callbacks to empty observable via pipe operator 591.82 ns 4.94 ns 4.94 ns 1.00

Sources

name rxcpp rpp prev rpp ratio
from array of 1 - create + subscribe + immediate 1185.71 ns 5.55 ns 5.55 ns 1.00
from array of 1 - create + subscribe + current_thread 1447.03 ns 18.51 ns 18.51 ns 1.00
concat_as_source of just(1 immediate) create + subscribe 4670.00 ns 168.45 ns 169.60 ns 0.99
defer from array of 1 - defer + create + subscribe + immediate 1215.95 ns 5.55 ns 5.55 ns 1.00
interval - interval + take(3) + subscribe + immediate 3145.71 ns 133.68 ns 133.65 ns 1.00
interval - interval + take(3) + subscribe + current_thread 3488.78 ns 58.71 ns 58.72 ns 1.00

Filtering Operators

name rxcpp rpp prev rpp ratio
immediate_just+take(1)+subscribe 1869.88 ns 12.84 ns 12.85 ns 1.00
immediate_just+filter(true)+subscribe 1758.62 ns 11.70 ns 12.01 ns 0.97
immediate_just(1,2)+skip(1)+subscribe 1778.65 ns 13.10 ns 13.11 ns 1.00
immediate_just(1,1,2)+distinct_until_changed()+subscribe 1386.04 ns 15.79 ns 15.77 ns 1.00
immediate_just(1,2)+first()+subscribe 2076.96 ns 12.97 ns 12.97 ns 1.00
immediate_just(1,2)+last()+subscribe 1492.29 ns 14.12 ns 14.11 ns 1.00
immediate_just+take_last(1)+subscribe 2056.79 ns 59.69 ns 61.35 ns 0.97

Schedulers

name rxcpp rpp prev rpp ratio
immediate scheduler create worker + schedule 490.53 ns 6.18 ns 6.18 ns 1.00
current_thread scheduler create worker + schedule 663.91 ns 18.22 ns 18.20 ns 1.00
current_thread scheduler create worker + schedule + recursive schedule 1097.78 ns 115.96 ns 115.51 ns 1.00

Transforming Operators

name rxcpp rpp prev rpp ratio
immediate_just+map(v*2)+subscribe 1335.86 ns 11.23 ns 11.22 ns 1.00
immediate_just+scan(10, std::plus)+subscribe 1458.64 ns 21.59 ns 21.59 ns 1.00
immediate_just+flat_map(immediate_just(v*2))+subscribe 3930.12 ns 228.95 ns 227.30 ns 1.01
immediate_just+buffer(2)+subscribe 2358.85 ns 59.19 ns 59.92 ns 0.99
immediate_just+window(2)+subscribe + subscsribe inner 4132.81 ns 1536.42 ns 1534.08 ns 1.00

Conditional Operators

name rxcpp rpp prev rpp ratio
immediate_just+take_while(false)+subscribe 1343.63 ns 11.46 ns 11.43 ns 1.00
immediate_just+take_while(true)+subscribe 1355.33 ns 11.71 ns 11.68 ns 1.00

Utility Operators

name rxcpp rpp prev rpp ratio
immediate_just(1)+subscribe_on(immediate)+subscribe 4240.82 ns 7.71 ns 7.71 ns 1.00

Combining Operators

name rxcpp rpp prev rpp ratio
immediate_just(immediate_just(1), immediate_just(1)) + merge() + subscribe 5186.89 ns 261.31 ns 252.13 ns 1.04
immediate_just(1) + merge_with(immediate_just(2)) + subscribe 6437.64 ns 242.79 ns 234.82 ns 1.03
immediate_just(1) + with_latest_from(immediate_just(2)) + subscribe - 234.02 ns 240.74 ns 0.97
immediate_just(immediate_just(1),immediate_just(1)) + switch_on_next() + subscribe 6298.34 ns 958.69 ns 959.33 ns 1.00
immediate_just(1) + zip(immediate_just(2)) + subscribe 3894.30 ns 535.15 ns 534.22 ns 1.00

Subjects

name rxcpp rpp prev rpp ratio
publish_subject with 1 observer - on_next 36.15 ns 26.84 ns 26.51 ns 1.01

Scenarios

name rxcpp rpp prev rpp ratio
basic sample 1883.50 ns 59.20 ns 59.58 ns 0.99
basic sample with immediate scheduler 1883.78 ns 35.48 ns 35.48 ns 1.00

Aggregating Operators

name rxcpp rpp prev rpp ratio
immediate_just+reduce(10, std::plus)+subscribe 1480.14 ns 19.99 ns 19.98 ns 1.00

Error Handling Operators

name rxcpp rpp prev rpp ratio
create(on_next(1), on_error())+on_error_resume_next(immediate_just(2)))+subscribe 1964.23 ns 329.64 ns 332.73 ns 0.99

@sonarqubecloud

Copy link
Copy Markdown

@AlexInLog AlexInLog merged commit a15df30 into v2 Mar 12, 2024
@AlexInLog AlexInLog deleted the current_thread_inside_new_thread branch March 12, 2024 13:19
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant